package br.unirio.ticketnator.action;

import java.util.Map;

import org.apache.struts2.interceptor.RequestAware;

import br.unirio.ticketnator.dao.DAOFactory;
//import br.unirio.ticketnator.model.Componente;
import br.unirio.ticketnator.model.Sistema;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class SistemaService extends ActionSupport implements RequestAware{

	private static final long serialVersionUID = -44456923548684L;
	
	public static final int TAMANHO_PAGINA = 25;
	
	private Map request;
	private int currentId;
	private int currentPage;
	
	private int ID;
	private String nome;
	
	public String getSistema() {
		return nome;
	}
	public void setSistema(String nome) {
		this.nome = nome;
	}

	
	/**
	 * Inicializa o servico de manipulacao de Sistemas.
	 */
	
	public SistemaService()
	{
		this.currentId = -1;
		this.currentPage = 0;
        request = ActionContext.getContext().getSession();
	}
	
	/**
	 * Indica a memoria de requisicao para a acao.
	 */
	@Override
	public void setRequest(Map<String, Object> arg0)
	{
		this.request = arg0;	
	}
	
	/**
	 * "Setta" o id de um Sistema
	 */
	public void setId(int id)
	{
		this.currentId = id;
	}
	
	public void setPage (int pagina)
	{
		this.currentPage = pagina;
	}
	
	/**
	 *  Determina se existe uma pagina anterior
	 */
	
	public boolean hasPreviousPage()
	{
		return currentPage > 0;
	}
	
	/**
	 * Retorna a pagina anterior
	 */
	
	public int getPreviousPage()
	{
		return hasPreviousPage() ? currentPage-1 :0;
	}
	
	/**
	 * Verifica a existencia de uma proxima pagina
	 */
	
	public boolean hasNextPage()
	{
		int contador = DAOFactory.getComponenteDAO().conta();
		return contador > (currentPage + 1) * TAMANHO_PAGINA;
	}
	
	/**
	 * Retorna a proxima pagina
	 */
	
	public int getNextPage()
	{
		return hasNextPage() ? currentPage + 1 : currentPage;
	}
	
	/**
	 * Cria um Sistema
	 */
	public String criaSistema()
	{
		request.put("sistema", new Sistema());
		return INPUT;
	}
	

	/**
	 * Edita um Sistema
	 */
	
	public String editaSistema()
	{
		request.put("sistema", DAOFactory.getSistemaDAO().getSistema(currentId));
		return INPUT;
	}
	
	/**
	 * Deleta Sistema
	 */
	
	public String deletaSistema ()
	{
		DAOFactory.getSistemaDAO().removeSistema(currentId);
		return SUCCESS;
	}
	
	/** 
	 * Salva as alteracoes do Sistema que foi editado
	 */
	
	public String salvaSistema()
	{
		Sistema s = new Sistema();
		s.setNomeSistema(nome);
                s.setIdSistema(currentId);
		request.put("Sistema", s);
		
                if(nome.length()== 0)
                {
                   addFieldError(nome, "nome invalido"); 
                   return INPUT;
                }
		if(s.getIdSistema() <= 0)
			DAOFactory.getSistemaDAO().insereSistema(s);
		else
			DAOFactory.getSistemaDAO().atualizaSistema(s);
		
		return SUCCESS;		
	}
}
